約 3,778,635 件
https://w.atwiki.jp/sampleisbest/pages/317.html
開発環境 メモ帳 実行環境 Microsoft Windows 8.1 (64bit) mml2smf4.js // OpenTextFile var ForReading = 1; // SaveOptionsEnum var adSaveCreateOverWrite = 2; var scale = {A 9, B 11, C 0, D 2, E 4, F 5, G 7};// 音階 // 外部変数 var timebase = 480; var deflen = 4;// default length var octave = 4; var st;// stream var sharp = ""; var flat = ""; var seq = new Array();// sequence var ch = 0;// channel var atick = 0;// absolute tick WScript.Quit(main()); //============================================================================== function main() { // 引数処理 var args = WScript.Arguments; if (args.length != 1) { WScript.Echo("usage cscript mml2smf2.js mmlfile"); return 1; } var path_in = args(0); // パス名処理 var fso = WScript.CreateObject("Scripting.FileSystemObject"); path_in = fso.GetAbsolutePathName(path_in); var dir = fso.GetParentFolderName(path_in); var fnm = fso.GetBaseName(path_in); var path_out = dir + "\\" + fnm + ".mid"; // 入力ファイルのオープン var fi = fso.OpenTextFile(path_in, ForReading);// ASCII while (! fi.AtEndOfStream) { var line = fi.ReadLine(); ParseLine for (var c = 0; c line.length; ) { var cmd = line.substr(c++, 1).toUpperCase(); var param = line.substr(c); switch (cmd) { case "\t" case " " case "|" break; case " " break ParseLine; case "*" // channel var p = param.match(/^(\d*)/); c += p[0].length; ch = parseInt(p[1]) - 1; atick = 0; break; case " " octave--; break; case " " octave++; break; case "@" // program change var p = param.match(/^(\d*)/); c += p[0].length; var value = parseInt(p[1]); SeqData(0, new Array(0xc0 | ch, value - 1)); break; case "A" case "B" case "C" case "D" case "E" case "F" case "G" // 音名 c += Note(cmd, param); break; case "K" // 調号 key signature var p = param.match(/^([#+\-])([A-G]+)/i); c += p[0].length; if (p[1] == "-") { flat = p[2].toUpperCase(); } else { sharp = p[2].toUpperCase(); } break; case "L" // 音価 var p = param.match(/^(\d*)/); c += p[0].length; deflen = parseInt(p[1]); break; case "O" var p = param.match(/^(\d*)/); c += p[0].length; octave = parseInt(p[1]); break; case "R" c += Rest(param); break; case "T" var p = param.match(/^(\d*)/); c += p[0].length; var tempo = parseInt(p[1]); var usec = 60000000 / tempo;// 4分音符のマイクロ秒数 SeqData(0, new Array(0xff, 0x51, 3, (usec 16) 0xff, (usec 8) 0xff, usec 0xff)); break; case "[" // 並列音名 c += ParallelNote(param); break; } } } fi.Close(); // トラック終了 SeqData(0, new Array(0xff, 0x2f, 0));// 最終チャネルの絶対tickに注意 // ソート seq.sort(SeqComp); // タイ処理 for (var s in seq) { var ds = seq[s]; for (var n = s - 1; 0 = n; n--) { var dn = seq[n]; if (dn == null) continue; if (dn.tick != ds.tick) break; if (dn[1] != ds[1]) continue;// note number if (dn[0] 0xf != ds[0] 0xf) continue;// channel if (dn[0] 0x80 ds[0] 0x90) {// note off/on delete seq[n]; delete seq[s]; } } } //----------------------------------------------------------------------------- // ストリームのオープン st = WScript.CreateObject("ADODB.Stream"); st.Charset = "iso-8859-1"; st.Open(); // ヘッダチャンク WriteBE(4, 0x4d546864);// MThd WriteBE(4, 6);// データ長 WriteBE(2, 0);// フォーマットタイプ WriteBE(2, 1);// トラック数 WriteBE(2, timebase);// タイムベース // トラックチャンク WriteBE(4, 0x4d54726b);// MTrk WriteBE(4, 0);// データ長(仮) var datalen = 0; var prevtick = 0; for (var s in seq) { var data = seq[s]; if (data == null) continue; var t = data.tick - prevtick;// delta time prevtick = data.tick; // 可変長tick var v = ((t 0xfe00000) 3)|((t 0x1fc000) 2)|((t 0x3f80) 1)|(t 0x7f)|0x80808000; for (var n = 3; 0 = n; n--) { var b = (v (8 * n)) 0xff; if (b != 0x80) { st.WriteText(String.fromCharCode(b)); datalen++; } } for (var d = 0; d data.length; d++) { st.WriteText(String.fromCharCode(data[d])); datalen++; } } st.Position -= datalen + 4; WriteBE(4, datalen);// データ長 // ストリームをファイルに保存 st.SaveToFile(path_out, adSaveCreateOverWrite); st.Close(); // 再生 var WshShell = WScript.CreateObject("WScript.Shell"); WshShell.Run(path_out); return 0; } function WriteBE(count, value) { for (var n = count - 1; 0 = n; n--) { st.WriteText(String.fromCharCode((value (8*n)) 0xff)); } } function SeqData(tick, data) { data.tick = atick + tick; seq.push(data); } function SeqComp(a, b) { return a.tick - b.tick; } // 休符処理 function Rest(param) { var p = param.match(/^(\d*)(\.*)/); var value = (p[1] == "") ? deflen parseInt(p[1]); var dot = p[2].length; var tick = timebase * 4 / value; tick += tick * ((1 dot) - 1) / (1 dot); atick += tick; return p[0].length; } // 音符処理 function Note(cmd, param) { var p = param.match(/^(\/?)([#+]*)(\-*)(\d*)(\.*)( ?)/); var value = (p[4] == "") ? deflen parseInt(p[4]); var dot = p[5].length; var tick = timebase * 4 / value; tick += tick * ((1 dot) - 1) / (1 dot); var gate = (p[6]) ? tick tick * 7 / 8; var acci;// 臨時記号 accidental if (p[1]) { acci = 0; } else { acci = p[2].length - p[3].length; if (acci == 0) { if (sharp.indexOf(cmd) != -1) acci = 1; if (flat.indexOf(cmd) != -1) acci = -1; } } var num = (octave + 1) * 12 + scale[cmd] + acci;// note number SeqData( 0, new Array(0x90 | ch, num, 0x70)); SeqData(gate, new Array(0x80 | ch, num, 0x00)); atick += tick; return p[0].length; } // 並列音符処理 function ParallelNote(param) { var p = param.match(/^([^]]*)](\d*)(\.*)( ?)/); var value = (p[2] == "") ? deflen parseInt(p[2]); var dot = p[3].length; var tick = timebase * 4 / value; tick += tick * ((1 dot) - 1) / (1 dot); var gate = (p[4]) ? tick tick * 7 / 8; var note = p[1].match(/[A-G][^A-G]*/gi);// 音名配列 for (var i = 0; i note.length; i++) { var n = note[i].match(/(.)(\/?)([#+]*)(\-*)(\d?)/); var name = n[1].toUpperCase(); var acci;// 臨時記号 accidental if (n[2]) { acci = 0; } else { acci = n[3].length - n[4].length; if (acci == 0) { if (sharp.indexOf(name) != -1) acci = 1; if (flat.indexOf(name) != -1) acci = -1; } } var o = (n[5] == "") ? octave parseInt(n[5]); var num = (o + 1) * 12 + scale[name] + acci;// note number SeqData( 0, new Array(0x90 | ch, num, 0x70)); SeqData(gate, new Array(0x80 | ch, num, 0x00)); } atick += tick; return p[0].length; } ivi.txt ivi.txt t60 *1 右手 [egc5][dgb][egc5]r *2 左手 c g cr
https://w.atwiki.jp/kojiro/pages/573.html
QUIT
https://w.atwiki.jp/sampleisbest/pages/319.html
開発環境 メモ帳 実行環境 Microsoft Windows 8.1 (64bit) mml2smf5.js // OpenTextFile var ForReading = 1; // SaveOptionsEnum var adSaveCreateOverWrite = 2; var scale = {A 9, B 11, C 0, D 2, E 4, F 5, G 7};// 音階 // 外部変数 var timebase = 480; var st;// stream var sharp = ""; var flat = ""; var track = new Array(); var seq;// sequence var atick;// absolute tick var deflen;// default length var octave; var velocity; var ch = 0;// channel WScript.Quit(main()); //============================================================================== function main() { // 引数処理 var args = WScript.Arguments; if (args.length != 1) { WScript.Echo("usage cscript mml2smf2.js mmlfile"); return 1; } var path_in = args(0); // パス名処理 var fso = WScript.CreateObject("Scripting.FileSystemObject"); path_in = fso.GetAbsolutePathName(path_in); var dir = fso.GetParentFolderName(path_in); var fnm = fso.GetBaseName(path_in); var path_out = dir + "\\" + fnm + ".mid"; // 入力ファイルのオープン var fi = fso.OpenTextFile(path_in, ForReading);// ASCII TrackStart(); while (! fi.AtEndOfStream) { var line = fi.ReadLine().toUpperCase(); ParseLine for (var c = 0; c line.length; ) { var cmd = line.substr(c++, 1); var param = line.substr(c); switch (cmd) { case "\t" case " " case "|" break; case " " break ParseLine; case "*" // channel var p = param.match(/^(\d*)/); c += p[0].length; ch = parseInt(p[1]) - 1; TrackEnd(); TrackStart(); break; case " " octave--; break; case " " octave++; break; case "@" // program change var p = param.match(/^(\d*)/); c += p[0].length; var value = parseInt(p[1]); SeqData(0, new Array(0xc0 | ch, value - 1)); break; case "A" case "B" case "C" case "D" case "E" case "F" case "G" // 音名 c += Note(cmd, param); break; case "K" // 調号 key signature var p = param.match(/^([#+\-])([A-G]+)/i); c += p[0].length; if (p[1] == "-") { flat = p[2]; } else { sharp = p[2]; } break; case "L" // 音価 var p = param.match(/^(\d*)/); c += p[0].length; deflen = parseInt(p[1]); break; case "O" var p = param.match(/^(\d*)/); c += p[0].length; octave = parseInt(p[1]); break; case "R" c += Rest(param); break; case "T" var p = param.match(/^(\d*)/); c += p[0].length; var tempo = parseInt(p[1]); var usec = 60000000 / tempo;// 4分音符のマイクロ秒数 SeqData(0, new Array(0xff, 0x51, 3, (usec 16) 0xff, (usec 8) 0xff, usec 0xff)); break; case "V" // volume 0-127 var p = param.match(/^(\d*)/); c += p[0].length; var value = parseInt(p[1]); SeqData(0, new Array(0xb0 | ch, 0x07, value)); break; case "[" // 並列音名 c += ParallelNote(param); break; } } } TrackEnd(); fi.Close(); // タイ処理 for (var t in track) { seq = track[t]; for (var s in seq) { var ds = seq[s]; for (var n = s - 1; 0 = n; n--) { var dn = seq[n]; if (dn == null) continue; if (dn.tick != ds.tick) break; if (dn[1] != ds[1]) continue;// note number if (dn[0] 0xf != ds[0] 0xf) continue;// channel if (dn[0] 0x80 ds[0] 0x90) {// note off/on delete seq[n]; delete seq[s]; } } } } //----------------------------------------------------------------------------- // ストリームのオープン st = WScript.CreateObject("ADODB.Stream"); st.Charset = "iso-8859-1"; st.Open(); // ヘッダチャンク WriteBE(4, 0x4d546864);// MThd WriteBE(4, 6);// データ長 WriteBE(2, 1);// フォーマットタイプ WriteBE(2, track.length);// トラック数 WriteBE(2, timebase);// タイムベース for (var tr in track) { seq = track[tr]; // トラックチャンク WriteBE(4, 0x4d54726b);// MTrk WriteBE(4, 0);// データ長(仮) var datalen = 0; var prevtick = 0; for (var s in seq) { var data = seq[s]; if (data == null) continue; var t = data.tick - prevtick;// delta time prevtick = data.tick; // 可変長tick var v = ((t 0xfe00000) 3)|((t 0x1fc000) 2)|((t 0x3f80) 1)|(t 0x7f)|0x80808000; for (var n = 3; 0 = n; n--) { var b = (v (8 * n)) 0xff; if (b != 0x80) { st.WriteText(String.fromCharCode(b)); datalen++; } } for (var d = 0; d data.length; d++) { st.WriteText(String.fromCharCode(data[d])); datalen++; } } var pos = st.Position; st.Position = pos - datalen - 4; WriteBE(4, datalen);// データ長 st.Position = pos; } // ストリームをファイルに保存 st.SaveToFile(path_out, adSaveCreateOverWrite); st.Close(); // 再生 var WshShell = WScript.CreateObject("WScript.Shell"); WshShell.Run(path_out); return 0; } function TrackStart() { seq = new Array(); atick = 0; deflen = 4; octave = 4; velocity = 100; } function TrackEnd() { SeqData(0, new Array(0xff, 0x2f, 0)); track.push(seq); } function SeqData(tick, data) { data.tick = atick + tick; seq.push(data); } function WriteBE(count, value) { for (var n = count - 1; 0 = n; n--) { st.WriteText(String.fromCharCode((value (8*n)) 0xff)); } } // 休符処理 function Rest(param) { var p = param.match(/^(\d*)(\.*)/); var value = (p[1] == "") ? deflen parseInt(p[1]); var dot = p[2].length; var tick = timebase * 4 / value; tick += tick * ((1 dot) - 1) / (1 dot); atick += tick; return p[0].length; } // 音符処理 function Note(cmd, param) { var p = param.match(/^(\/?)([#+]*)(\-*)(\d*)(\.*)( ?)/); var value = (p[4] == "") ? deflen parseInt(p[4]); var dot = p[5].length; var tick = timebase * 4 / value; tick += tick * ((1 dot) - 1) / (1 dot); var gate = (p[6]) ? tick tick * 7 / 8; var acci;// 臨時記号 accidental if (p[1]) { acci = 0; } else { acci = p[2].length - p[3].length; if (acci == 0) { if (sharp.indexOf(cmd) != -1) acci = 1; if (flat.indexOf(cmd) != -1) acci = -1; } } var num = (octave + 1) * 12 + scale[cmd] + acci;// note number SeqData( 0, new Array(0x90 | ch, num, velocity)); SeqData(gate, new Array(0x80 | ch, num, 0)); atick += tick; return p[0].length; } // 並列音符処理 function ParallelNote(param) { var p = param.match(/^([^]]*)](\d*)(\.*)( ?)/); var value = (p[2] == "") ? deflen parseInt(p[2]); var dot = p[3].length; var tick = timebase * 4 / value; tick += tick * ((1 dot) - 1) / (1 dot); var gate = (p[4]) ? tick tick * 7 / 8; var note = p[1].match(/[A-G][^A-G]*/gi);// 音名配列 var anum = new Array();// 音番号配列 for (var i = 0; i note.length; i++) { var n = note[i].match(/(.)(\/?)([#+]*)(\-*)(\d?)/); var name = n[1]; var acci;// 臨時記号 accidental if (n[2]) { acci = 0; } else { acci = n[3].length - n[4].length; if (acci == 0) { if (sharp.indexOf(name) != -1) acci = 1; if (flat.indexOf(name) != -1) acci = -1; } } var o = (n[5] == "") ? octave parseInt(n[5]); var num = (o + 1) * 12 + scale[name] + acci;// note number anum.push(num); SeqData( 0, new Array(0x90 | ch, num, velocity)); } for (var n in anum) { SeqData(gate, new Array(0x80 | ch, anum[n], 0)); } atick += tick; return p[0].length; } ivi.txt ivi.txt t60 *1 @1 右手 [egc5][dgb][egc5]r *1 @1 左手 c g cr
https://w.atwiki.jp/myscripts/pages/28.html
MyScripts を指先で覚えたい人向けのページです。 特定のブラウザでURLを開く NowPlaying(再生中の曲情報)をコピーする コピー内容でGoogle検索する クリップボード制御 HTMLを自動生成する 特定のブラウザでURLを開く Libing で開く をインポート // Libing の URL スキームを指定する var scheme = "libhttp"; // URL の先頭の http 部分を置き換えて開く TARGET = "openurl"; TEXT.replace(/^http/, scheme); Sleipnir で開く をインポート // Sleipnir の URL スキームを指定する var scheme = "sleipnirblue"; // URL の先頭の http 部分を置き換えて開く TARGET = "openurl"; TEXT.replace(/^http/, scheme); 要はブラウザの URL スキームさえわかれば機械的にできます。 NowPlaying(再生中の曲情報)をコピーする SONG という独自変数を使います。SONG は以下のような仕様です。 SONG - 再生中の曲の情報。title/albumTitle/artistの各属性から取得できます。曲を再生していない場合、SONGがnullになります。 CopyNowPlaying をインポート if (SONG === null) { // 音楽が再生中でないとき // ミュージックを開く TARGET = "openurl"; "music //"; } else { // 音楽が再生中のとき // 曲情報をコピーする alert("曲情報をコピーします"); TARGET = "copy"; SONG.title + " by " + SONG.artist; } コピー内容でGoogle検索する URL 全体をエンコードするときは encodeURI、クエリ部分の一部をエンコードするときは encodeURIComponent を使います。 Google 検索するときなどは、後者を利用します。 GoogleSearch-1 をインポート TARGET = "openurl"; "https //www.google.co.jp/search?q=" + encodeURIComponent(TEXT); MyScripts には、独自変数をエンコードした ENC〜 変数が用意されています。 TEXT 変数に対しては、ENCTEXT 変数が該当します。 この変数を使用することで、GoogleSearch-1 は以下のように書き換えられます。 GoogleSearch-2 をインポート TARGET = "openurl"; "https //www.google.co.jp/search?q=" + ENCTEXT; 以下蛇足ですが、はまりやすいポイントです。 encodeURIComponent が『! ()*』などをエンコードしてくれないために、まれに予期せぬ動作をすることがあります。 そのようなときは、多少強引ですが、以下のように力技でエンコードします。 GoogleSearch-3 をインポート // ごり押しエンコード function encURI(uri) { var ch; return encodeURIComponent(uri).replace(/[! ()*]/g, function() { ch = RegExp.lastMatch; return ch === "*" ? "%2A" escape(ch); }); } TARGET = "openurl"; "https //www.google.co.jp/search?q=" + encURI(TEXT); 2重エンコードするときなどは、この最後の方法が無難です。 クリップボード制御 クリップボードのテキストを参照するときは、CLIPBOARD 変数を使います。 クリップボードにコピーするときは COPY を使います。 COPY は TARGET="copy"; と異なり、処理の途中でコピーできます。 calclip をインポート // クリップボードのテキストを取得 var formula = CLIPBOARD; var result; try { // クリップボードの式を計算 result = eval(formula); // 結果をコピー COPY(result); } catch (e) { // クリップボードのテキストが計算式以外のとき // エラーメッセージを表示 result = e.message; } TARGET = "info"; result; HTMLを自動生成する MyScripts では、TEXT 変数から入力データを受け取り、加工して、それを元に HTML を生成することができます。 多くの場合は #HTML で十分なのですが、IS_HTML = true; を使用した方が便利なこともあります。 ここではその開発の手順を示します。 1. #HTML でプロトタイプを作成します。最終的には不要になりますが、これがあるとメンテナンスしやすくなります。 grep - prototype をインポート #HTML !DOCTYPE html html head meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no" title grep /title link rel="stylesheet" href="./jqm/jquery.mobile.css" script src="./jquery.js" /script script src="./jqm/jquery.mobile.js" /script script function append(lines) { var $list = $( #grep-list ); for (var i = 0; i lines.length; i++) $( li ).text(lines[i]).appendTo($list); $list.listview( refresh ); } onload = function() { var lines = TEXT.split( \n ); append(lines); } /script /head body section data-role="page" header data-role="header" data-position="fixed" h1 grep /h1 /header div data-role="content" ul id="grep-list" data-role="listview" data-filter="true" data-filter-placeholder="Filter lines..." /ul /div /section /body /html 2. 最終的に他のアプリで開くならば、jQuery Mobile や Twitter Bootstrap のファイルを外部参照するよう修正する link rel="stylesheet" href="./jqm/jquery.mobile.css" script src="./jquery.js" /script script src="./jqm/jquery.mobile.js" /script 上記の箇所を以下のように修正する。 link rel="stylesheet" href="http //code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css" script src="http //code.jquery.com/jquery-1.8.2.min.js" /script script src="http //code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js" /script 3. 先頭の #HTML を除いた部分を選択し、コピーする 4. クリップボードのテキストを登録 を使い、HTML を文字列化する 5. ファイル名などの指定や、HTML を修正する記述を行う grep をインポート var html = " !DOCTYPE html \n html \n head \n meta name=\"viewport\" content=\"width=device-width,initial-scale=1,user-scalable=no\" \n title grep /title \n link rel=\"stylesheet\" href=\"http //code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css\" \n script src=\"http //code.jquery.com/jquery-1.8.2.min.js\" /script \n script src=\"http //code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js\" /script \n script \nfunction append(lines) {\n var $list = $( #grep-list );\n\n for (var i = 0; i lines.length; i++)\n $( li ).text(lines[i]).appendTo($list);\n\n $list.listview( refresh );\n}\n\nonload = function() {\n var lines = decodeURIComponent( "; html += ENCTEXT; html += " ).split( \\n );\n append(lines);\n}\n /script \n /head \n body \n section data-role=\"page\" \n header data-role=\"header\" data-position=\"fixed\" \n h1 grep /h1 \n /header \n div data-role=\"content\" \n ul id=\"grep-list\" data-role=\"listview\" data-filter=\"true\" data-filter-placeholder=\"Filter lines...\" \n /ul \n /div \n /section \n /body \n /html "; FILENAME = "grep"; IS_HTML = true; TARGET="openin"; html; openin することで、生成したHTMLを別アプリで開きます。HTML が使える別アプリとの連携にも、MyScripts は使えるわけです。
https://w.atwiki.jp/telestea/pages/108.html
JavaScript(ジャヴァスクリプト)とは、オブジェクト指向のスクリプト言語である。主にウェブブラウザ(ブラウザ)にクライアントサイド実装され、動的なウェブサイト構築や、リッチインターネットアプリケーション(RIA)など高度なユーザインタフェース(エクステンション)の開発に用いられる。 拡張子.js パラダイムマルチパラダイム 登場時期1995年 設計者ブレンダン・アイク 開発者ネットスケープコミュニケーションズ、Mozilla Foundation 最新リリース1.8 / 2008年 評価版リリース1.9.3 / 2010年 型付けダック・タイピング 主な処理系JavaScriptCore、KJS、Nitro、Rhino、SpiderMonkey、V8ほか 方言JScript 影響を受けた言語C言語、Java、Perl、Python、Scheme、Self 影響を与えた言語Dart、Objective-J プラットフォームクロスプラットフォーム JavaScript - ウィキブックス
https://w.atwiki.jp/wiki6_ppx/pages/19.html
Paper Plane xUI Script Module WSH のように ActiveX Scripting Host を利用してスクリプトを実行する PPx Module の試作品です。PaperPlanexUI0.40+3以降用です。0.35~0.40+2でも制限付きで使用可能です。 htmlプラグインエラー このプラグインを使うにはこのページの編集権限を「管理者のみ」に設定してください。 簡単な使いかたの説明 セットアップ PPXSCR.DLL を PPx(0.35以降) があるディレクトリ内に用意し、PPx 上で「*script スクリプトファイル名」を実行することでスクリプトを実行することができます。 実行方法 例えば PPx のディレクトリ(%0)に "hoge.vbs", "fuga.js" というスクリプトがあるとします。 キーボードに直接割り付ける KC_main = { ;例えば Shift + x に割り付ける \X , *script %0hoge.vbs } ctrl + Enter のメニューから実行する M_Ccr = { fuga を実行 = *script %0fuga.js } 上記の例はいずれも PPc からの実行ですが、その他のモジュールからでも実行できます。動作確認をする場合は付属の "sample.vbs" を実行してみるとよいでしょう。 詳しくは付属の "PPXSCR.TXT" を参照しましょう。 Tips マークしたエントリーを全て処理する VBScript で書く場合 !*script マークしたエントリの名前を順番に表示する If PPx.EntryFirstMark = 0 Then PPx.Echo "マークはありません" Else Do ここで個別の処理を行う PPx.Echo "エントリの名前 " PPx.EntryName If PPx.EntryNextMark = 0 then exit do Loop End If JavaScript で書く場合 //!*script // マークしたエントリの名前を順番に表示する if (PPx.EntryFirstMark == 0){ PPx.Echo( マークはありません ); } else { while(true){ // ここで個別の処理を行う PPx.Echo( エントリの名前 + PPx.EntryName); if(PPx.EntryNextMark == 0) break; } } Script マークした複数のファイルの拡張子でフィルタするスクリプト マークした複数のファイルの拡張子でフィルタ 選択ファイルの別名バックアップをその場で作るスクリプト 例えば test.txt というファイルがあったら test_txt051012.bak というふうに日付のついたファイル名でその場にコピーします。 //!*script // back up with date. // This script is in the public domain. var date = makeDate(); if(PPx.EntryFirstMark == 0 PPx.EntryName != null) PPx.EntryMark = 1; if(PPx.EntryFirstMark == 1){ while(true){ var dir = PPx.Extract( %1 ); var entryName = PPx.EntryName; var newName = entryName.replace(/^(.*)\.(\w+)$/i, $1_$2 ); newName += date + .bak ; var fs = new ActiveXObject( Scripting.FileSystemObject ); f = fs.GetFile(dir + \\ + entryName); f.Copy(dir + \\ + newName, true); // 上書き PPx.EntryMark = 0; if(PPx.EntryNextMark == 0) break; } } function makeDate(){ /* make yymmdd string */ var d = new Date(); var year = d.getFullYear().toString().substr(2,2); var month = (d.getMonth() + 1).toString(); if (month.length == 1 ) month = 0 + month; var day = d.getDate().toString(); if (day.length == 1 ) day = 0 + day; return year + month + day; } 以上をテキストエディタに貼り付け "backupWithDate.js" とでもして PPx ディレクトリに保存。 M_Ccr = { 日付付きバックアップ = *script %0backupWithDate.js } 選択ファイル名のリストを外部エディタで編集し、一気にリネームするスクリプト 実行すると、選択中エントリのレスポンスファイル(一行ごとにファイル名を書いたテキストファイル)を外部エディタで立ち上げます。そのファイルを編集し、上書き保存の後、エディタを終了すると編集内容の通りに一気にファイルをリネームします。 実行すると「Waiting...」というプロンプトが出てきますが、無視してください。スクリプトの終了後に自動的に消えます。 //!*script // Version 1.29+3 以降用 // This script is in the public domain. // PPc 用スクリプト。 // 選択エントリーをテキストエディタで一気にリネーム。 // // ===== 設定 ================================================= // 使用するエディタのパスを設定。パス区切りは \\ // 例 var editor = C \\Program Files\\sakura\\sakura.exe ; // SDI のエディタじゃないと終了判定がうまく行かないかも。 // 空にしておくと PPe で編集。 var editor = D \\home\\Toolz\\sakura\\sakuraW.exe ; // ============================================================ if(PPx.EntryFirstMark != 1){ PPx.Echo( マークされたエントリがありません ); PPx.Quit(); } // マークしたファイルのリストを取得 var listFile = PPx.Extract( %aFCN ); if(editor editor != ){ // 指定エディタで起動 var command = %Obsq \" + editor + \" \" + listFile + \" ; PPx.Execute(command); }else{ // 指定エディタが設定されていない場合は PPe で PPx.Execute( *edit \" + listFile + \" ); } // ファイル操作 var fso = new ActiveXObject( Scripting.FileSystemObject ); // 編集したファイルを読む var newFileNames = []; if(fso.FileExists(listFile)){ var f = fso.OpenTextFile(listFile, 1); while(! f.AtEndOfStream){ newFileNames.push(f.ReadLine()); } f.close(); }else{ PPx.Echo( リネームデータを取得できませんでした ); PPx.Quit(); } // エントリのリネーム var dir = PPx.Extract( %1%\\ ); for(var i = 0; true; i++){ var oldName = dir + PPx.EntryName; var newName = dir + newFileNames[i]; if ( newFileNames[i] newName != oldName fso.FileExists(oldName) (!fso.FileExists(newName)) ){ fso.GetFile(oldName).Move(newName); }else{ if(newName != oldName){ PPx.Echo(PPx.EntryName + のリネームに失敗しました。\n名前の重複などを確認してください\n +newName+ \n +oldName); } } PPx.EntryMark = 0; if(PPx.EntryFirstMark == 0) break; } PPx.Quit(); 以上をテキストエディタに貼り付け "batchRename.js" とでもして PPx ディレクトリに保存。 M_Ccr = { 外部エディタでまとめてリネーム = *script %0batchRename.js } PPx から公開サーバーに FTP でファイルを上げるスクリプト qftp4ppx2.js BASP21 DLL のインストールが必要です。 FTPサーバーやパスワード、ローカルのディレクトリの設定などはスクリプトを直接編集します。 参考 指向性メモ 2004-10-07(元になったWSHスクリプト) htmlプラグインエラー このプラグインを使うにはこのページの編集権限を「管理者のみ」に設定してください。 参考サイト PPx Script は、WSH と同じように ActiveX Scripting Host を利用していますので、文法や組み込み関数等は、WSH とほぼ同じです。 とあるように、WSH ( Windows Script Host ) 関連の情報はそのまま応用できます。 Windows Script Host Windows管理者のためのWindows Script Host入門
https://w.atwiki.jp/sevenlives/pages/234.html
JavaScript【ジャバスクリプト】 読み:じゃばすくりぷと 英語:JavaScript 意味: Netscape Communicationsが開発したスクリプト言語?。 プロトタイプオブジェクト指向であり主な用途はwebブラウザ(クライアント側)で働く言語。 これによりクライアント側での動きのある柔軟なページが可能となった。 クライアント側で作用するためブラウザさえあれば簡単に動かせる。 当初はLiveScriptと呼ばれていたが当時話題のJava言語の名をつけ、JavaScriptと変更してしまった。Javaとは別の言語。 JavaScriptもオブジェクト指向であるがJavaやC++などのクラスベースのオブジェクト指向ではないためオブジェクト指向を使いこなすにはJavaScript用のプロトタイプベース・オブジェクト指向の理解が必要。実体はハッシュのようにシンプルでプロトタイプ・チェーンなど理解すれば、非常に柔軟な使い方ができます。 ブラウザやバージョンによって実装が微妙に違うためまた、最近の言語に多いエラー表示機能はないのでバグ処理が困難でした。しかしFirefoxのアドオンであるFirebugなどが開発されかなりその環境も大きく改善されています。 容易に書けるためセキュリティホールなどが発生しやすく、1度廃れてしまった経緯がある。 しかしGoogleによってJavaScriptを大いに活用したAjaxという使い方でフレキシブルなページが注目を浴び、一躍注目の言語に復活しました。 時代の変化やWebブラウザの独自機能などのため仕様がどんどん拡張、変更しており DOM、XMLHttpRequestからjQueryなどのライブラリの活用までトレンド変化の激しい言語だとも言えます。 2019年03月07日 ECMAScriptECMAScript 3? ECMAScript 4? ECMAScript 5? ECMAScript 6 ECMAScript 2016? ECMAScript 2017? JScript CoffieScript? Dart? JSS? ダイナミック言語? altJS Toy language? サンドボックス 同一出身ポリシー Dynamic HTML【DHTML】バリアントタイプ【variant type】 イベント・ハンドラ イベント・リスナ(JavaScript) ブックマークレット ロールオーバー ウィジェット ビヘイビア ActionScript? サーバーサイドJavaScript ユーザー・エージェント? クライアント・スニファ? HTA LiveConnect? 関数(JavaScript) スコープ(JavaScript)グローバル変数(JavaScript)? ローカル変数(JavaScript) グローバル・コード リテラル(JavaScript)?関数リテラル 配列リテラル オブジェクト・リテラル strictモード JsTestDriver? JavaScriptシェル? Signed Scripts? JSDoc? JsDoc Toolkit 控えめなJavaScript ■ プロトタイプベース・オブジェクト指向? プロパティ(JavaScript) メソッド(JavaScript)? オブジェクト(JavaScript)? コンストラクタ(JavaScript) for in 構文 プロトタイプ(JavaScript) オブジェクト・リテラル ラッパー・オブジェクト(JavaScript)? レキシカルスコープ スコープ・チェーン コンストラクタ・チェーン? ハッシュ? 匿名関数 高階関数 クロージャ(JavaScript) 変数オブジェクト? 関数オブジェクト 匿名オブジェクト? プロトタイプ・オブジェクト? ビルトイン・オブジェクト グローバル・オブジェクト ホストオ・ブジェクト? プロトタイプ・チェーン? 実行コンテキスト(JavaScript) Activation Object 暗黙の参照? ガーベージ・コレクション JSON DOM(JavaScript) 属性?DontEnum ReadOnly? DontDelete Internal? ■ 型 数値型(Number) 文字列型(String)? 論理型(Boolean)? オブジェクト型(Object)? 配列型(Array)? var? null undefine NaN Infinity? ■ スクリプト・エンジン(JavaScript)? SpiderMonkey ActionMonkey? TraceMonkey JaegerMonkey V8 Carakan? Futhark? Tamarin Rhino JavaScriptCore Chakra? ■ JavaScriptライブラリ prototype.js YUI Library jQuery JSAN? ■ JavaScriptフレームワーク GWT? Adobe Spry? Dojo Toolkit? Ext JS? AngularJS? Backbone.js React.js? Knockout.js? Ember.js? イベントドリブン イベントバブルアップ? XMLHttpRequest ■ クロスブラウザ Internet Explorerキオスクモード? Firefox Unobtrusive Scripting
https://w.atwiki.jp/myscripts/pages/17.html
「Hello, World!」な MyScripts 入門ページです。千里の道も一歩から〜 直接スクリプトに書く TEXT パラメータを参照する CLIPBOARD パラメータを参照する OPTION パラメータを参照する LOAD_JSON で読み込む 実行方法別パラメータ早見表実行方法 記号の意味 ポイント 実行方法による分岐 直接スクリプトに書く // HelloMyScripts-1 // 直接スクリプトに入力します alert("Hello, MyScripts!"); TEXT パラメータを参照する // HelloMyScripts-2 // TEXT パラメータを参照します alert("Hello, " + TEXT + "!"); 実行するときは、以下の URL を開きます。 myscripts //run?title=HelloMyScripts-2 text=MyScripts TEXT パラメータは汎用的な入力パラメータです。 実行方法に応じて、適切なデータを参照します。 クリップボード URL内のパラメータ Open Inで渡されたテキスト 処理対象スクリプトの本体 いきなり全部を理解するのは難しいので、最初は「いろんなものに使える便利なやつ」程度の認識でもいいかと思います。 詳細はこのページ下部の「実行方法別パラメータ早見表」を参照してください。 CLIPBOARD パラメータを参照する // HelloMyScripts-3 // CLIPBOARD パラメータを参照します alert("Hello, " + CLIPBOARD + "!"); 赤裸々な直近の黒歴史を晒します(クリップボードの中身を表示します)。 つまり「MyScripts」をコピーしていれば、「Hello, MyScripts!」となります。 OPTION パラメータを参照する // HelloMyScripts-4 // OPTION パラメータを参照します alert("Hello, " + OPTION + "!"); 実行するときは、以下の URL を開きます。 myscripts //run?title=HelloMyScripts-4 option=MyScripts TEXT パラメータと似ている印象を持たれたかもしれませんが、寿命が違います。 TEXT は実行するたびに変わりますが、OPTION は最後に明示的に指定した値を(アプリを終了するまで)引継ぎます。 OPTION を使うスクリプトは、意図した通りに動作させるためには、実行方法に気をつける必要があります。 LOAD_JSON で読み込む // HelloMyScripts-5 // データをファイルに保存します SAVE_JSON("HelloMyScripts", "MyScripts"); // HelloMyScripts-6 // データをファイルから読み込みます var str = LOAD_JSON("HelloMyScripts"); alert("Hello, " + str + "!"); HelloMyScripts-5、HelloMyScripts-6 の順に実行してください。 スクリプトで処理した内容を、SAVE_JSON で保存し、(別のスクリプトからも) LOAD_JSON で読み込むことができます。 今回は "HelloMyScripts" という言葉を合言葉(key)にしています。 スクリプトの設定などを保存させるのにとても便利なのですが、放置するといつまでもゴミデータ残るので、使わなくなったら削除を忘れずにしましょう。 // HelloMyScripts-7 // データを初期化します SAVE_JSON("HelloMyScripts", null); 実行方法別パラメータ早見表 実行方法 TEXT CLIPBOARD OPTION 通常実行 ク ク × Open In 本 ク × URL t or ク ク ○ スクリプト処理 本 ク × 実行方法 通常実行 スクリプトの一覧から、スクリプトを実行する Open In 他アプリから、Open In で開く URL リンクや JavaScript から myscripts //run?title=〜 を開く スクリプト処理 スクリプト処理スクリプト実行する 記号の意味 本 テキスト全体 or スクリプト全体 t URL内の text パラメータで指定したテキスト ク クリップボードのテキスト ○ オプション変更可能 × オプション変更不可能 ポイント URL を開くときの TEXT パラメータは、textを指定したか否かによって動作が変わる OPTIONの値を変えるには option パラメータを指定した URL を開く 実行方法による分岐 応用として、ユーザがどのようにスクリプトを実行したかによって、処理を切り分けることができます。 実行方法による分岐 をインポート #PROCESS_SCRIPT TARGET = "info"; if (SCRIPT_TITLE === null) { if (TEXT === CLIPBOARD) { alert("クリップボード"); } else { alert("text パラメータ"); } } else { alert("スクリプト本文"); } TEXT; たまたまクリップボードと text パラメータのテキストが一致した場合は、クリップボードと表示されます。
https://w.atwiki.jp/socup/pages/157.html
他のアプリケーションにメッセージを送る オブジェクトオブジェクトにメッセージを送る オブジェクトのプロパティ オブジェクトのindexによる指定 オブジェクトの名前による指定 階層構造にあるオブジェクトの指定 オブジェクトの作成 オブジェクトの詳細 コメント 変数代入 配列 文字列 制御繰り返し 関数 色々な関数ログ出力 遅らせる クリップボードの値 ダイアログ表示 アプリで呼べるAPIを調べる。 ハンドラドロップで実行される 終了時に実行 10秒毎に実行 スクリプトオブジェクトオブジェクトの関数の呼び出し オブジェクトの定義 継承 自動継承 インスタンス作成 他のアプリケーションにメッセージを送る tell application "Safari" set hoge to URL of document 1 end tell オブジェクト 文書(document),段落(paragraph)、文字列(word)、文字(character)等 オブジェクトにメッセージを送る メッセージ オブジェクト オブジェクトのプロパティ hoge of document document s hoge オブジェクトのindexによる指定 document 3 オブジェクトの名前による指定 document "hoge.txt" 階層構造にあるオブジェクトの指定 paragraph 2 of document 1 オブジェクトの作成 make new オブジェクトの詳細 http //www.mimikaki.net/mi/help/applescript.htm コメント --hoge (* hoge *) 変数 大文字小文字の区別なし 代入 set foo to "a" set foo to 1 配列 set hogelist to {} set hogelist to item 4 of hogelist count of hogelist characters of "hoge" {"h","o","g","e"} set hogeText to text 3 thru 5 of "abcdefg" 文字列 "hoge" "hogehoge" the length of "hoge" 制御 繰り返し repeat with i from 1 to 5 by 1 end repeat 関数 on hoge(a,b,c) --括弧はいるらしい return a end hoge 色々な関数 ログ出力 log "opi" hoge 遅らせる delay 5 クリップボードの値 set hoge to the clipboard set the clipboard to hoge as string ダイアログ表示 display dialog "aa" アプリで呼べるAPIを調べる。 AppleScriptエディタで「用語の説明」から見れる。 ハンドラ ドロップで実行される on open(hoge) end open 終了時に実行 on quit end quit 10秒毎に実行 on idle return 10 end idle スクリプトオブジェクト オブジェクトの関数の呼び出し hoge() of myScriptObj オブジェクトの定義 script myScriptObj property foo on hoge() end hoge end script 継承 script myChildObj property parent myParentObj end script 自動継承 hoge() of myScriptObj on hoge() end hoge script myScriptObj end script インスタンス作成 copy myScriptObject to huga hoge() of huga
https://w.atwiki.jp/myscripts/pages/25.html
[iOS]神ツールを作るための神アプリ、MyScriptsがかなり便利 | ひとりぶろぐ http //hitoriblog.com/?p=5612 @hitoriblog さんによるアプリ紹介 [iOS]第1回 JavaScript実行開発環境MyScriptsの魅力を全力で伝えてみる | ひとりぶろぐ http //hitoriblog.com/?p=5676 @hitoriblog さんによるアプリ紹介 IAMASのGeekLabでMyScriptsのことを話してきました | ひとりぶろぐ http //hitoriblog.com/?p=6848 @hitoriblog さんによる詳しいプレゼン資料が掲載されています Teachme バックグラウンド監視 通知センターからの起動 スクリプトをSpotlightから検索する方法 MyScripts@WIKI内 スクリプトの起動方法 デフォルトスクリプトの使い方 4つのアクション